﻿#!/usr/bin/env python
# -*- coding: utf-8 -*-
#modulos del sistema
try:
    import pygtk
    pygtk.require("2.0")
    import gtk
    import gtk.glade
    import os
    import urllib
except:
    print "Necesitas la librería gráficas gtk+pygtk"

class gFind:
    """
        Manejador de la parte grafica.
        Inicia
    """
    def __init__(self):
        #Set the Glade file
        self.gladefile = "gfind.glade"
        self.wTree = gtk.glade.XML(self.gladefile, "window1")
        #Armamos la lista de los directorios a buscar
        self.find_directories()
        #Generamos la vista del resultado
        self.find_view = self.wTree.get_widget("treeview4")
        self.add_find_column("Nombre", 0)
        self.add_find_column("Carpeta", 1)
        self.add_find_column("Tamaño", 2)
        self.add_find_column("Tipo", 3)
        self.find_list = gtk.ListStore(str, str, str, str)
        self.find_view.set_model(self.find_list)
        dic={"on_window1_destroy": gtk.main_quit,
             "on_button17_clicked": self.find,
             "on_button16_clicked": self.close,
             "on_button18_clicked": self.about }
        self.wTree.signal_autoconnect(dic)

    def find_directories(self):
        """

        Creamos la lista de directorios, para rellenar el combobox. 

        """
        store = gtk.ListStore(str)
        self.combo_box = self.wTree.get_widget("directories_to_search")
        self.combo_box.set_model(store)
        cell = gtk.CellRendererText()
        self.combo_box.pack_start(cell, True)
        self.combo_box.add_attribute(cell, 'text',0)
        user = os.getlogin()
        home = "/home/" + user
        list_directories = [ "/", home]
        for x in range(len(list_directories)):
            self.combo_box.append_text(list_directories[x])
        self.combo_box.set_active(0)

    def add_find_column(self, title, columnId):
        """
        
            Esta funcion agrega una columna al resultado de la búsqueda 
        
        """
        column = gtk.TreeViewColumn(title, gtk.CellRendererText(),\
                text=columnId)
        column.set_resizable(True)
        column.set_sort_column_id(columnId)
        self.find_view.append_column(column)

    def find(self,widget):
        """

            Permite recorrer el arbol de directorio, comenzando por 'path'
            Y busca recursivamente 'archivo'
            Obs: sigue la lógica de la función os.walk(). La misma me la
            enseño "Kaufmann Manuel" http://code.google.com/u/humitos/

        """
        # Probando para borrar la lista de la búsqueda anterior Ok
        self.find_list.clear()
        
        self.input_1 = self.wTree.get_widget("entry2")
        archivo = self.input_1.get_text()

        model = self.combo_box.get_model()
        index = self.combo_box.get_active()
        path = model[index][0]
        bandera=False
        #caso base: filenames!=[] and boton_cancel.clicked() != True
        for dirpath, dirnames, filenames in os.walk(path):
            if filenames!=[]:
                #print "-------------------"
                #print filenames
                for un_archivo in filenames:
                    if archivo in un_archivo:
                        try:
                            size = os.path.getsize(os.path.join(dirpath, un_archivo))
                            size = str(size) + "kb"
                            aux = un_archivo.split(".")
                            lista=[archivo,dirpath,size,aux[1]]
                            self.find_list.append(lista)
                            print "Encontrado con éxito"
                            bandera = True
                            break
                        except:
                            print "ALGUN ERROR" 
        if (bandera==False):
            print "Archivo no encontrado"

    def close(self,widget):
        print "gFind cerrado correctamente, gracias por utilizarlo"

        gtk.main_quit()

    def about(self,widget):
        """
            A simle vista no puedo conectar el boton cerrar con 
            la eliminacion del widget ventana.
            Investigar, me falta ver el tema de las señales.
        """
        print "Mostrando diálogo de Acerca de..."
        help_dialog = dialog_about()
        #help_dialog.run()
        print "lo cierro"

class dialog_about:
    """
        Clase para mostrar el msj de Acerca de...
    """

    def __init__(self):
        self.help_dialog = gtk.AboutDialog()
        self.help_dialog.set_name("gFind")
        self.help_dialog.set_version("0.1")
        self.help_dialog.set_comments("gFind es un buscador de archivos locales para Gnome")
        self.help_dialog.set_copyright("© 2007 - Heizenreder Guillermo")
        autor=["Heizenreder Guillermo gheize@gmail.com"]
        self.help_dialog.set_authors(autor)
        #Acá el error que buscamos -> INVESTIGAR!
        #self.help_dialog.connect('response',self.close)
        self.help_dialog.show()

    def close(self):
        print "Aprete..!!.. ;)"

    def run(self):
        return self.help_dialog.run()

if __name__=="__main__":
    gfind=gFind()
    gtk.main()

